Applications that use image data are found in many different fields, such as security control, television, broadcasting, social media, video telephony, videoconferencing, wireless devices, streaming media applications, remote desktop, cloud computing, and others. Image data may refer to video data, computer generated graphics data, desktop data, or any other type of data depicting a visual perception. Image data may be stored in a variety of medium (DVDs, Blu-Ray disks, mobile devices, memory sticks, hard-drive, etc.) and may be transmitted through a variety of wired or wireless transmission media (also called a carrier) (e.g., electrical, optical, radio, acoustical or other form of propagated signals—such as carrier waves, infrared signals etc.).
Image compression and decompression are performed to reduce the consumption of expensive resources, such as storage space or transmission bandwidth. In general, a codec (encoder/decoder) includes an encoder used to convert the source image data into a compressed form occupying a reduced space prior to storage or transmission. The codec may also comprise a decoder which receives compressed data and converts it into a decompressed image or stream ready for display or for further processing. The codec may be implemented only in software executed on one or more general purpose processors, implemented only on dedicated hardware components, or a combination of software running on general purpose processors and dedicated hardware components. Compression efficiency of encoders is typically defined by the bit rate and the perceived image quality of the decompressed video stream. In many applications, it is desirable to have a constant bit rate, maximum bit rate, or substantially constant bit rate while maintaining a good quality image. This can be particularly challenging for real time encoders that encode image data that has a high variability in content from picture to picture and/or within the same picture or when encoding/decoding pictures with high resolutions, high frame rate, or when low latency is desired.
Prior to compressing a new picture from a stream of pictures, a codec estimates the size of the encoded picture that would result from the compression of the new picture in order to select the appropriate configuration parameters to use for processing this new picture (e.g., in particular the estimated size can be used in the selection of an appropriate Quantization Parameter (QP)). In standard low latency compression approaches, this estimation is based on compression statistics related to the encoding of pictures preceding the new picture in the compression order. The compression statistics may include the actual final compression size of preceding encoded pictures, as well as additional information related to the compression of these preceding pictures in the codec. Thus, in standard low latency compression approaches, in order to use the most recent compression statistics, the codec waits for the completion of the compression of the picture which precedes the new picture before starting encoding the new picture. This enables the codec to use the latest compression statistics to estimate the size of the new picture (where this size is based on compression statistics related to the compression of the preceding picture, when the compression of the preceding picture is completed (for example, when the final compression size of the preceding picture is known)). Further, when encoding a picture, one or more reference pictures can be needed, and one of the references can be the preceding picture, such that the codec needs to wait for the completion of the compression of the preceding picture prior to compressing the new picture. However, these standard approaches have significant limitations when compression is performed in a real time environment where streams of pictures have high frame rates and/or high resolutions; and/or where low latency is desired.